"""
日志配置模块 - 使用loguru
配置日志输出到文件和控制台，包含文件名和行数信息
"""

import sys
from pathlib import Path
from loguru import logger
import os


def setup_logger(log_level: str = "INFO", log_dir: str = "logs"):
    """
    配置loguru日志系统
    
    Args:
        log_level: 日志级别，默认INFO
        log_dir: 日志文件夹路径，默认logs
    """
    
    # 移除默认的控制台输出
    logger.remove()
    
    # 确保日志目录存在
    log_path = Path(log_dir)
    log_path.mkdir(exist_ok=True)
    
    # 自定义日志格式 - 包含文件名和行数
    log_format = (
        "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
        "<level>{level: <8}</level> | "
        "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | "
        "<level>{message}</level>"
    )
    
    # 控制台输出配置
    logger.add(
        sys.stdout,
        format=log_format,
        level=log_level,
        colorize=True,
        backtrace=True,
        diagnose=True
    )
    
    # 文件输出配置 - 按日期命名
    logger.add(
        log_path / "{time:YYYY-MM-DD}.log",
        format=log_format,
        level=log_level,
        rotation="00:00",  # 每天午夜轮转
        retention="30 days",  # 保留30天
        compression="zip",  # 压缩旧日志
        backtrace=True,
        diagnose=True,
        enqueue=True,  # 异步写入
        encoding="utf-8"
    )
    
    # 错误日志单独文件
    logger.add(
        log_path / "error_{time:YYYY-MM-DD}.log",
        format=log_format,
        level="ERROR",
        rotation="00:00",
        retention="30 days",
        compression="zip",
        backtrace=True,
        diagnose=True,
        enqueue=True,
        encoding="utf-8"
    )
    
    logger.info("日志系统初始化完成")
    logger.info(f"日志文件路径: {log_path.absolute()}")
    logger.info(f"日志级别: {log_level}")


def get_logger(name: str = None):
    """
    获取logger实例
    
    Args:
        name: logger名称
        
    Returns:
        logger实例
    """
    if name:
        return logger.bind(name=name)
    return logger


# 初始化日志系统
def init_logger():
    """初始化日志系统"""
    log_level = os.getenv("LOG_LEVEL", "INFO").upper()
    log_dir = os.getenv("LOG_DIR", "logs")
    setup_logger(log_level, log_dir)


# 自动初始化
init_logger() 